'use strict';
import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import rootReducer from '../reducers/index';

const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore);

//----------
//设置action类型，为了方便写在这里，可以另外写个单独js文件
function counter(isStore = 0, action) {
  switch (action.type) {
  case 'INCREMENT':
    return isStore + 1;
  case 'DECREMENT':
    return isStore - 1;
  default:
    return isStore;
  }
}
//-----------

// 创建 Redux store 来存放应用的状态。
// API 是 { subscribe, dispatch, getState }。
let isStore = createStore(counter);  //创建状态
isStore.subscribe(() =>              //dispatch时触发订阅
  alert(isStore.getState())          //获得状态
);


// 改变内部 state 惟一方法是 dispatch 一个 action。
// action 可以被序列化，用日记记录和储存下来，后期还可以以回放的方式执行
// store.dispatch({ type: 'INCREMENT' });
// 1
// store.dispatch({ type: 'INCREMENT' });
// 2
isStore.dispatch({ type: 'DECREMENT' });  //相当于手动去dispatch
// 1
//你应该把要做的修改变成一个普通对象，这个对象被叫做 action，而不是直接修改 state。然后编写专门的函数来决定每个 action 如何改变应用的 state，这个函数被叫做 reducer。

export default function configureStore(initialState) {
  const store = createStoreWithMiddleware(rootReducer, initialState)
  return store;
}
